<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>let和const</title>
</head>
<body>
    <script>
        // 变量提升
            // console.log(a);
            // var a = 2;
            // 实际相当于
            // var a;
            // console.log(a);
            // a = 2;
        // 变量提升

        // 1.let声明的变量没有变量提升
            // console.log(a);
            // let a = 10;
            //这样会报错
        // 1.let声明的变量没有变量提升

        // 2.是一个块级作用域
            // console.log(b);
            // if(true){
            //     var b = 10;
            // }

            // console.log(b);
            // if(true){
            //     let b = 10;
            // }
        // 2.是一个块级作用域

        // 3.不能重复声明
            // var a = 2;
            // var a = 4;
            // console.log(a);

            // let a = 2;
            // let a = 5;
            // console.log(a);
        // 3.不能重复声明

        // const声明常量，初始化之后无法修改
            // const a = 12;
            // a = 13;
            // console.log(a);
        // const声明常量，初始化之后无法修改

        //如果是声明引用型常量，比如对象，对象的属性可以修改，地址值不能修改，其他也是地址值不能改
            // const a = {
            //     max:100
            // };
            // a.max = 10;
            // console.log(a.max);
            // a = {min:1};
            // console.log(a);
        //如果是声明引用型常量，比如对象，对象的属性可以修改，地址值不能修改，其他也是地址值不能改

        //作用1：for循环(闭包)
        // var arr = [];
        //var变量提升
        // var i; 
        // for(var i = 0;i<10;i++){
        //     arr[i] = function(){
        //         return i;
        //     }
        // }
        // console.log(arr[5]())

        // var arr = [];
        // for(let i = 0;i<10;i++){
        //     arr[i] = function(){
        //         return i;
        //     }
        // }
        // console.log(arr[5]())
        //作用1：for循环(闭包)

        // 作用2：不会污染全局变量
            // let RegExp = 10;
            // console.log(RegExp);
            // console.log(window.RegExp);

            // var RegExp = 10;
            // console.log(RegExp);
            // console.log(window.RegExp);
        // 作用2：不会污染全局变量

        //建议：在默认情况下用const，而只有在你知道变量值需要被修改的情况时才使用let
    </script>
</body>
</html>